//
//  IMAdStrategyManager.h
//  DualMediationSDK
//
//  广告策略管理器头文件
//  Created by YeJary on 2025/7/15.
//

#import <Foundation/Foundation.h>
#import "IMAdStrategyModels.h"

NS_ASSUME_NONNULL_BEGIN

/**
 * 广告场景枚举
 */
typedef NS_ENUM(NSInteger, IMAdScene) {
    IMAdSceneOpenScreen = 1,        // 开屏场景
    IMAdSceneLevelStart,            // 关卡开始
    IMAdSceneLevelWin,              // 关卡胜利
    IMAdSceneLevelFail,             // 关卡失败
    IMAdSceneLevelRetry,            // 关卡重试
    IMAdSceneLevelWait,             // 关卡等待提示
    IMAdSceneNativeSettlement,      // 原生结算界面
    IMAdSceneBannerLevelEnter,      // Banner登录大厅
    IMAdSceneInterLevelWin,         // 插屏关卡胜利
    IMAdSceneInterLevelFail,        // 插屏关卡失败
    IMAdSceneInterLevelRetry,       // 插屏关卡重试
    IMAdSceneInterLevelWait,        // 插屏关卡等待提示
    IMAdSceneNativeSettlement2,     // 原生结算界面2
    IMAdSceneSDKConfig,             // SDK配置场景
    IMAdSceneSplashCool,            // 冷启动开屏场景
    IMAdSceneSplashHot,             // 热启动开屏场景
    IMAdSceneBannerInit = 32        // Banner初始化场景
};

/**
 * 广告策略管理器
 */
@interface IMAdStrategyManager : NSObject

/**
 * 单例实例
 */
+ (instancetype)sharedManager;

/**
 * 初始化广告策略（从配置文件或网络加载）
 */
- (void)initializeAdStrategy;

/**
 * 上报关卡行为，由SDK调用策略接口
 * @param scene 广告场景
 * @param level 当前关卡
 * @param onlineTime 在线时长
 * @param completion 完成回调，返回是否应该展示广告
 */
- (void)reportLevelBehavior:(IMAdScene)scene
                      level:(NSInteger)level
                 onlineTime:(NSTimeInterval)onlineTime
                 completion:(void(^)(BOOL shouldShowAd, id _Nullable condition))completion;

/**
 * 检查是否应该展示广告
 * @param scene 广告场景
 * @param userLevel 用户当前关卡
 * @param onlineTime 在线时长
 * @return 是否应该展示广告
 */
- (BOOL)shouldShowAdForScene:(IMAdScene)scene
                   userLevel:(NSInteger)userLevel
                  onlineTime:(NSTimeInterval)onlineTime;

/**
 * 获取场景对应的策略条件
 * @param scene 广告场景
 * @return 策略条件
 */
- (nullable id)getConditionForScene:(IMAdScene)scene;

/**
 * 获取SDK启动配置
 * @return SDK启动配置实例
 */
- (nullable IMSDKStartupConfig *)getSDKStartupConfig;

/**
 * 手动应用SDK启动配置
 * 获取配置并自动应用到系统中
 */
- (void)applySDKStartupConfiguration;

/**
 * 应用指定的SDK启动配置
 * @param config 要应用的配置实例
 */
- (void)applySDKStartupConfig:(nullable IMSDKStartupConfig *)config;

/**
 * 更新广告展示记录
 * @param scene 广告场景
 * @param level 当前关卡
 */
- (void)updateAdShowRecord:(IMAdScene)scene level:(NSInteger)level;

/**
 * 根据场景名称获取场景枚举值
 * @param sceneName 场景名称
 * @return 场景枚举值
 */
+ (IMAdScene)sceneFromName:(NSString *)sceneName;

/**
 * 场景广告是否启用（基于策略的 ad_status）
 * @param scene 广告场景
 * @return YES 表示该场景允许投放，NO 表示禁用
 */
- (BOOL)isAdEnabledForScene:(IMAdScene)scene;

/**
 * 从广告策略接口响应中更新策略数据
 * @param response 广告策略接口返回的响应数据
 */
- (void)updateStrategiesFromResponse:(IMAdStrategyResponse *)response;

@end

NS_ASSUME_NONNULL_END
